package com.example.apidocserver.application.event;

import com.example.apidocserver.domain.document.entity.ApiDocument;
import com.example.apidocserver.domain.document.entity.ApiInfo;
import com.example.apidocserver.domain.document.entity.DocMenu;
import com.example.apidocserver.interfaces.vo.DocumentVo;
import com.example.apidocserver.interfaces.vo.OrderChangeVo;

/**
 * 文档相关处理事件
 *
 * @author xyqlg
 */
public interface DocumentEvent {
    /**
     * 获取文档信息
     *
     * @param writeFlag   是否为编辑查询
     * @param spaceId     工作空间id，可为空
     * @param pubOnlyFlag 只查询公开文档信息
     * @return 文档信息和文档空间信息
     */
    DocumentVo getReadDocuments(Integer spaceId, Boolean writeFlag, Boolean pubOnlyFlag);

    /**
     * 查询文档目录
     *
     * @param docId       文档id
     * @param envId       环境id
     * @param writeFlag   读写查询flag
     * @param pubOnlyFlag 只查询公开文档信息
     * @return 文档信息
     */
    DocumentVo getDocumentMenu(Integer docId, Integer envId, boolean writeFlag, Boolean pubOnlyFlag);

    /**
     * 增加文档对象
     *
     * @param document 文档对象信息
     * @return 文档对象
     */
    ApiDocument addDoc(ApiDocument document);

    /**
     * 增加或修改文档目录
     *
     * @param docMenu      目录信息
     * @param checkAddMenu 接口信息
     * @return 文档目录信息
     */
    DocMenu upsertDocMenu(DocMenu docMenu, ApiInfo checkAddMenu);

    /**
     * 数据移动位置
     *
     * @param params 实体
     * @return 消息
     */
    String orderChangeMenu(OrderChangeVo params);

    /**
     * 删除文档目录
     *
     * @param id 目录id
     */
    void deleteMenu(Integer id);
}
